﻿/**
 * @file PhyscisPropGeneralLaminateWapper.h
 * @brief 多层板物理属性 相关的python接口
 * @author wangning (2185896382@qq.com)
 * @date 2024-12-03
 */
#ifndef _PY_SEA_PHYSCISPROPGeneralLaminate_WAPPER_H___
#define _PY_SEA_PHYSCISPROPGeneralLaminate_WAPPER_H___

#include <QString>
#include <QObject>
#include "PythonInterfaceAPI.h"
#include "FITK_Component/FITKAcousticsPhysics/PyFITKPhyscisPropGeneralLaminate.h"

class GeneralLaminate : public Acoustics::PyFITKPhyscisPropGeneralLaminate
{
public:
    explicit GeneralLaminate(const QString& name);
    explicit GeneralLaminate();
    virtual ~GeneralLaminate() = default;
};

/**
 * @brief 多层板物理属性相关PYTHON接口装饰
 * @author wangning (2185896382@qq.com)
 * @date 2024-12-03
 */
class PythonInterfaceAPI PhyscisPropGeneralLaminateWapper : public QObject
{
    Q_OBJECT
public slots:
    GeneralLaminate* new_GeneralLaminate();

    void delete_GeneralLaminate(GeneralLaminate* obj);
    /**
     * @brief 在Python解释器中通过名称获取对象
     * @author wangning (2185896382@qq.com)
     * @date 2024-12-03
     */
    GeneralLaminate* static_GeneralLaminate_GetGeneralLaminate(const QString& name);
    /**
     * @brief 获取名称
     * @author wangning (2185896382@qq.com)
     * @date 2024-12-03
     */
    QString getName(GeneralLaminate* obj);
    /**
     * @brief 设置名称
     * @author wangning (2185896382@qq.com)
     * @date 2024-12-03
     */
    void setName(GeneralLaminate* obj, const QString& name);
    /**
     * @brief   添加层
     * @param[i] material:材料
     * @param[i] thickness:厚度
     * @param[i] angle: 角度
     * @param[i] DLFSpectra:频谱
     * @author wangning (2185896382@qq.com)
     * @date   2024-12-03
     */
    void addLayer(GeneralLaminate* obj, const QString& material, double thickness, double angle, const QString& DLFSpectra=QString());
    /**
     * @brief   插入层(从1开始计数)
     * @param[i] num:插入层数
     * @param[i] material:材料
     * @param[i] thickness:厚度
     * @param[i] angle: 角度
     * @param[i] DLFSpectra:频谱
     * @author wangning (2185896382@qq.com)
     * @date   2024-12-03
     */
    void insertLayer(GeneralLaminate* obj, int num, const QString& material, double thickness, double angle, const QString& DLFSpectra=QString());
    /**
     * @brief   删除层(从1开始计数)
     * @param[i] num:删除层数
     * @author wangning (2185896382@qq.com)
     * @date   2024-12-03
     */
    void deleteLayer(GeneralLaminate* obj, int num);
    /**
     * @brief   获取层数, 获取失败返回-1
     * @author wangning (2185896382@qq.com)
     * @date   2024-12-03
     */
    int getLayerCount(GeneralLaminate* obj);
    /**
     * @brief  创建物理属性
     * @param[i] name 名称
     * @author wangning (2185896382@qq.com)
     * @date   2024-12-03
     */
    void createPhyscisProp(GeneralLaminate* obj, const QString& name);
};

#endif


